Add bootstrap-migrate-v3-to-v5 skill for Power Pages (Bootstrap 3 -> 5) - #181
Conversation
Adds the /power-pages:migrate-to-v5 skill that orchestrates `pac pages bootstrap-migrate`, applies AI-assisted residual fixes (page-header, glyphicons, mangled custom CSS), uploads, verifies the Bootstrap 5 runtime flag flip via pac-log.txt, and validates. Includes SKILL.md, reference recipes, and the eval. Drops the internal PLAN.md design doc (authoring artifact, not used at runtime). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Priyanshu Agrawal (priyanshu92)
left a comment
There was a problem hiding this comment.
Bump the version in /plugins/power-pages/.claude-plugin/plugin.json to 2.1.0
There was a problem hiding this comment.
Pull request overview
Adds a new Power Pages skill, /power-pages:migrate-to-v5, to guide migration of classic Power Pages sites from Bootstrap 3 to Bootstrap 5 using pac pages bootstrap-migrate, followed by assisted residual fixes, upload, runtime-flag verification via pac-log.txt, and validation.
Changes:
- Added the
migrate-to-v5skill playbook (SKILL.md) with an 8-phase orchestration flow. - Added reference documentation for the migration engine output/behavior and a manual-fix “recipe book”.
- Added an eval suite covering common migration scenarios (already-downloaded site, unauthenticated user, code-site stop condition, runtime-flag flip troubleshooting).
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| plugins/power-pages/skills/migrate-to-v5/SKILL.md | New skill orchestration guide for Bootstrap 3→5 migration, upload, verification, and validation. |
| plugins/power-pages/skills/migrate-to-v5/references/migration-engine-reference.md | Reference for pac pages bootstrap-migrate outputs and the upload post-processor flag flip behavior. |
| plugins/power-pages/skills/migrate-to-v5/references/bootstrap-v5-manual-fixes.md | Manual fix recipes for residual migration items the engine only flags. |
| evals/power-pages/migrate-to-v5/evals.json | Evaluation prompts/expectations for the new skill’s core flows and guardrails. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Rename skill + eval folders (git mv, preserves history) - Use 'traditional' instead of 'classic' throughout SKILL.md - Renumber Phase 2 sections (activation check 2.2, snapshot 2.3) and fix cross-reference - Align tracking name to BootstrapMigrateV3ToV5; add mapping-table entry - Activation probe: curl -sL to treat 3xx as active; fetch body on 4xx/5xx to check unactivated signature Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 254d90e7-220c-4886-a833-53db72c18394
- Add gate/not-a-gate markers with prose blocks for AskUserQuestion prompts - Catalogue gates in approval-gates.md (section 6.31) - Use PLUGIN_ROOT instead of CLAUDE_PLUGIN_ROOT - Add Skill to allowed-tools; switch grep -i to grep -iE - List skill under Migration in README Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 254d90e7-220c-4886-a833-53db72c18394
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:9
- PR title/description says this adds a
/power-pages:migrate-to-v5skill, but the implementation and documentation added in this PR are consistently named/bootstrap-migrate-v3-to-v5(skill frontmattername, README section, evals, approval-gates, tracking mapping). Please align the PR metadata and/or the skill naming so users know the correct invocation name.
name: bootstrap-migrate-v3-to-v5
description: >-
Migrates a traditional Power Pages site from Bootstrap 3 to Bootstrap 5. Downloads the
site, runs the pac pages bootstrap-migrate engine, reviews the change report, applies
AI-assisted fixes for the residual hierarchy/CSS changes the engine only flags, uploads
the migrated site (which auto-enables the Bootstrap 5 runtime flag), verifies the flag,
and validates. Use when the user wants to upgrade an older Bootstrap-3 portal to
Bootstrap 5. NOT for code sites (React/Vue/Angular/Astro) — those are never Bootstrap-3.
…ctRoot in bootstrap-migrate-v3-to-v5 - Use git -C on both add and commit so per-category commits target the V5 copy - Pass --projectRoot and document the traditional-download no-op for skill tracking Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 254d90e7-220c-4886-a833-53db72c18394
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (2)
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:3
- The PR description/title mention a
/power-pages:migrate-to-v5skill, but the implemented skill name isbootstrap-migrate-v3-to-v5(and docs/evals also use that). This mismatch will confuse users and makes it unclear which invocation name is intended. Align the PR description and/or rename the skill (including folder name, references, approval-gates entry, README section, and evals) so there is a single canonical command name.
---
name: bootstrap-migrate-v3-to-v5
description: >-
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:383
- This step says
--projectRoot "<MIGRATED_FOLDER>"is "the folder containing powerpages.config.json", but this skill explicitly targets classic/traditional downloads wherepowerpages.config.jsonis not present. The parenthetical is misleading and contradicts the next sentence that says tracking is a no-op for traditional sites.
3. **Record skill usage** — follow `${PLUGIN_ROOT}/references/skill-tracking-reference.md`, passing
`--projectRoot "<MIGRATED_FOLDER>"` (the folder containing `powerpages.config.json`) and
`--skillName "BootstrapMigrateV3ToV5"`. Tracking only writes when the project is a **code site**
(`.powerpages-site/site-settings/` exists); for a traditional/native download the script exits
silently as a no-op — that is expected, so call it unconditionally and don't treat the no-op as an
error. If tracking files are written, include them in the final commit.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 254d90e7-220c-4886-a833-53db72c18394
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (4)
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:110
- Phase 2’s local-folder validation currently checks for
website.ymlandsitesetting.ymlat the root. In this plugin, PAC-downloaded site identity is normally.powerpages-site/website.ymland site settings live under.powerpages-site/site-settings/(see scripts/lib/detect-project-context.js:72-105). As written, a valid downloaded site can be incorrectly rejected.
- **If the user provided a local site folder path** (or `$ARGUMENTS` names one): verify it exists
and looks like a downloaded traditional site (contains `website.yml` and `sitesetting.yml`). Use it
as `SITE_FOLDER`.
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:313
- The Phase 7.1 pre-flight checks reference
website.ymlcontainingadx_websiteidand a monolithicsitesetting.yml. In this repo,.powerpages-site/website.ymlis a flat file withid:/name:keys (scripts/lib/detect-project-context.js:72-105), and site settings are stored as separate*.sitesetting.ymlfiles under.powerpages-site/site-settings/. Please align the gating checks to that structure (or explicitly call out if this migration engine uses a different legacy layout).
- `website.yml` must have a valid `adx_websiteid`.
- `sitesetting.yml` must contain `Site/BootstrapV5Enabled` with value `true`.
Verify both (`Grep`/`Read`). If either is missing, the flag flip silently no-ops — fix before uploading.
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/SKILL.md:382
- The skill-usage tracking guidance is internally inconsistent: it says
--projectRoot "<MIGRATED_FOLDER>"is “the folder containing powerpages.config.json”, but this skill is explicitly for traditional/non-code sites (which typically do not have powerpages.config.json). Also, the tracking script requires--authoringTool(plugins/power-pages/references/skill-tracking-reference.md, plugins/power-pages/scripts/update-skill-tracking.js:29-32).
3. **Record skill usage** — follow `${PLUGIN_ROOT}/references/skill-tracking-reference.md`, passing
`--projectRoot "<MIGRATED_FOLDER>"` (the folder containing `powerpages.config.json`) and
`--skillName "BootstrapMigrateV3ToV5"`. Tracking only writes when the project is a **code site**
(`.powerpages-site/site-settings/` exists); for a traditional/native download the script exits
silently as a no-op — that is expected, so call it unconditionally and don't treat the no-op as an
plugins/power-pages/skills/bootstrap-migrate-v3-to-v5/references/migration-engine-reference.md:41
- This step claims the engine appends
Site/BootstrapV5Enabledinto a monolithicsitesetting.yml. Elsewhere in the plugin, site settings are represented as individual*.sitesetting.ymlfiles under.powerpages-site/site-settings/(see plugins/power-pages/scripts/create-site-setting.js and references/skill-tracking-reference.md). Consider rewording this to describe the setting by name/value rather than a single-file format.
3. Replaces the embedded `bootstrap.min.css` (v3) with the Bootstrap 5 stylesheet.
4. Appends a `Site/BootstrapV5Enabled` record (value `true`) to `sitesetting.yml`
(skipped if already present).
…trap Renames the skill directory, eval directory, SKILL.md name, all five approval-gate ids, the approval-gates catalog section, the skill-tracking entry (MigrateBootstrap / Site/AI/Skills/MigrateBootstrap), the README entry, and the reference-doc mentions. The pac pages bootstrap-migrate CLI verb is unrelated and left untouched. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c10b282d-bbe9-4fab-ad9f-4bf333ad953b
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.
Suppressed comments (2)
plugins/power-pages/skills/migrate-bootstrap/SKILL.md:2
- PR title/description says this adds
/power-pages:bootstrap-migrate-v3-to-v5, but the shipped skill is namedmigrate-bootstrap(and README/evals/approval-gates also reference/migrate-bootstrap). Please align the PR metadata and the skill invocation name so users aren’t told to run a command that doesn’t exist, or rename the skill + all references consistently.
name: migrate-bootstrap
plugins/power-pages/skills/migrate-bootstrap/SKILL.md:383
--projectRoot "<MIGRATED_FOLDER>" (the folder containing powerpages.config.json)is misleading for classic/traditional downloads (they don’t havepowerpages.config.json). Suggest wording that--projectRootshould be the code-site root when applicable, and that passing<MIGRATED_FOLDER>for classic sites is fine because the script no-ops unless.powerpages-site/site-settings/exists.
`--projectRoot "<MIGRATED_FOLDER>"` (the folder containing `powerpages.config.json`) and
Adds the /power-pages:bootstrap-migrate-v3-to-v5 skill that orchestrates
pac pages bootstrap-migrate, applies AI-assisted residual fixes (page-header, glyphicons, mangled custom CSS), uploads, verifies the Bootstrap 5 runtime flag flip via pac-log.txt, and validates.Includes SKILL.md, reference recipes, and the eval.